package com.ruoyi.trainingManagement.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.trainingManagement.mapper.CourseStudentInfoMapper;
import com.ruoyi.trainingManagement.domain.CourseStudentInfo;
import com.ruoyi.trainingManagement.service.ICourseStudentInfoService;

import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log;


/**
 * 课程学生信息Service业务层处理
 * 
 * @author chenxl
 * @date 2025-06-18
 */
@Service
public class CourseStudentInfoServiceImpl implements ICourseStudentInfoService 
{
    @Autowired
    private CourseStudentInfoMapper courseStudentInfoMapper;

    /**
     * 查询课程学生信息
     * 
     * @param id 课程学生信息主键
     * @return 课程学生信息
     */
    @Override
    public CourseStudentInfo selectCourseStudentInfoById(String id)
    {
        return courseStudentInfoMapper.selectCourseStudentInfoById(id);
    }

    /**
     * 查询课程学生信息列表
     * 
     * @param courseStudentInfo 课程学生信息
     * @return 课程学生信息
     */
    @Override
    public List<CourseStudentInfo> selectCourseStudentInfoList(CourseStudentInfo courseStudentInfo)
    {
        return courseStudentInfoMapper.selectCourseStudentInfoList(courseStudentInfo);
    }

    /**
     * 新增课程学生信息
     * 
     * @param courseStudentInfo 课程学生信息
     * @return 结果
     */
    @Override
    public int insertCourseStudentInfo(CourseStudentInfo courseStudentInfo)
    {
        return courseStudentInfoMapper.insertCourseStudentInfo(courseStudentInfo);
    }

    /**
     * 修改课程学生信息
     * 
     * @param courseStudentInfo 课程学生信息
     * @return 结果
     */
    @Override
    public int updateCourseStudentInfo(CourseStudentInfo courseStudentInfo)
    {
        return courseStudentInfoMapper.updateCourseStudentInfo(courseStudentInfo);
    }

    /**
     * 批量删除课程学生信息
     * 
     * @param ids 需要删除的课程学生信息主键
     * @return 结果
     */
    @Override
    public int deleteCourseStudentInfoByIds(String[] ids)
    {
        return courseStudentInfoMapper.deleteCourseStudentInfoByIds(ids);
    }

    /**
     * 删除课程学生信息信息
     * 
     * @param id 课程学生信息主键
     * @return 结果
     */
    @Override
    public int deleteCourseStudentInfoById(String id)
    {
        return courseStudentInfoMapper.deleteCourseStudentInfoById(id);
    }

    //调用selectByCourseScheduleDetailsId
    @Override
    public List<CourseStudentInfo> selectByCourseScheduleDetailsId(String courseScheduleDetailsId) {
        return courseStudentInfoMapper.selectByCourseScheduleDetailsId(courseScheduleDetailsId);
    }

    //调用selectStudentIdsByCourseScheduleDetailsId
    @Override
    public List<String> selectStudentIdsByCourseScheduleDetailsId(String courseScheduleDetailsId) {
        return courseStudentInfoMapper.selectStudentIdsByCourseScheduleDetailsId(courseScheduleDetailsId);
    }
    //调用batchUpdateCourseScheduleDetailsId
    @Override
    public int batchUpdateCourseScheduleDetailsId(String targetCourseScheduleDetailsId, List<CourseStudentInfo> courseStudentInfoList) {
        // ---------------------- 新增：参数校验（核心） ----------------------
        // 1. 校验目标班级ID（新班级ID）不为空
        if (targetCourseScheduleDetailsId == null || targetCourseScheduleDetailsId.trim().isEmpty()) {
            log.error("批量更新失败：目标班级ID（targetCourseScheduleDetailsId）不能为空");
            return 0;
        }
        // 2. 校验学生列表不为空
        if (courseStudentInfoList == null || courseStudentInfoList.isEmpty()) {
            log.error("批量更新失败：学生列表（courseStudentInfoList）不能为空");
            return 0;
        }
        // 3. 校验每个学生的“学生ID”不为空（避免SQL条件为 student_id = null）
        for (CourseStudentInfo student : courseStudentInfoList) {
            if (student.getStudentId() == null || student.getStudentId().trim().isEmpty()) {
                log.error("批量更新失败：学生列表中存在空的学生ID（studentId），跳过该学生");
                courseStudentInfoList.remove(student); // 移除无效学生，避免影响整体SQL
            }
        }
        // 4. 校验过滤后学生列表不为空
        if (courseStudentInfoList.isEmpty()) {
            log.error("批量更新失败：过滤无效学生后，学生列表为空");
            return 0;
        }
        // -------------------------------------------------------------------

        // 调用Mapper执行更新（原有逻辑不变）
        return courseStudentInfoMapper.batchUpdateCourseScheduleDetailsId(targetCourseScheduleDetailsId, courseStudentInfoList);
    }

}
